package code14_exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test02 {

	public static void main(String[] args) {
		try {
			Date date = stringToDate("2000-02-02");
			System.out.println(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		try {
			f1();
		} catch (ParseException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (NullPointerException e) {
			e.printStackTrace();
		} catch (ReflectiveOperationException e) {
			e.printStackTrace();
		}
		
//		try {
//			f1();
//		} catch (ParseException | ClassNotFoundException e) {
//			// 多个异常类型，共用同一个处理方案
//			e.printStackTrace();
//		}
	}
	// 运行时异常, 编译器不管
	// 检查异常, 需要显式处理 (自己捕获try..., throw 抛给其他调用者)
	public static Date stringToDate(String str) throws ParseException {
		// int m = 1/0; 运行时异常
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//		Date d = null;
//		try {
//			d = sdf.parse(str);
//		} catch (ParseException e) {
//			e.printStackTrace();
//		}
//		return d;
		Date d = sdf.parse(str);// 当前方法内部解决不了
		return d;
	}
	// throws 表示方法可能抛出哪些异常
	public static void f1() throws ParseException,NullPointerException, ReflectiveOperationException {
		// 方法内可以不抛出此类的异常
		if (Math.random() >= 0.4) {
			// 创建一个异常对象, 并抛出
			throw new NullPointerException("random>=0.4");
		}
		
		if (Math.random() >= 0.5) {
			throw new ReflectiveOperationException("检查异常");
		}
	}
}
